#ifndef TABCHAT_H
#define TABCHAT_H

#include "OpenaiManager.h"
#include "PromptInfo.h"
#include <QCheckBox>
#include <QPlainTextEdit>
#include <QPushButton>
#include <QShortcut>
#include <QTextEdit>
#include <QVector>
#include <QWidget>

class TabChat : public QWidget
{
    Q_OBJECT

public:
    explicit TabChat(QWidget *parent = nullptr);
    void setLog(QPlainTextEdit *logOutput)
    {
        m_logOutput = logOutput;
    }

public slots:
    void startChat(const QString &url, const QString &apiKey, const QString &model);

signals:
    void logMessage(const QString &message);
    void requestChat();

private slots:
    void onSendClicked();
    void onEditPromptClicked();
    void handleShortcut();

private:
    void createUI();
    void updateLog(const QString &log);

    QTextEdit *m_inputEdit;          // 输入框
    QTextEdit *m_outputEdit;         // 输出框
    QPushButton *m_sendButton;       // 发送按钮
    QPushButton *m_editPromptButton; // 编辑提示按钮
    QShortcut *m_sendShortcut;       // 发送快捷键

    QPlainTextEdit *m_logOutput;    // 日志输出
    OpenaiManager *m_openaiManager; // OpenAI管理器

    QString m_currentUrl;    // 当前URL
    QString m_currentApiKey; // 当前API Key
    QString m_currentModel;  // 当前模型

    // 历史聊天记录结构体
    struct ChatHistory
    {
        QString question; // 问题
        QString answer;   // 回答
    };

    static const int MAX_HISTORY = 50; // 最大历史记录数
    QVector<ChatHistory> m_history;    // 历史记录列表

    QPushButton *m_clearHistoryButton; // 清除历史按钮
    QCheckBox *m_keepHistoryCheck;     // 保留历史记录复选框

    // 历史记录处理函数
    void addHistory(const QString &question, const QString &answer);
    void clearHistory();
    QString buildPrompt(const QString &content, const PromptInfo &promptInfo);
};

#endif // TABCHAT_H